Vary Header
Response header
例
req headerを指定する
code:response
Vary: Accespt-Encoding
複数指定してもいい
code:response
Vary: Accept-Encoding, User-Agent
その場合はANDになる
完全一致
これは特殊
code:reponse
Vary: *
良くない例
頻繁に変わる値を指定する
e.g. referer
注意点
どういうものか?
URLとMethodを見れば、返却されるresourceが一意に決定できることを意味する
MethodというのはPOSTとかGETとかmrsekut.icon
しかし、Method + URLでは一意に決まらないことがある
clientによって解釈できる圧縮形式が異なるため、URLが同一でも異なる値を返しうる
client Aに対してはgzipで圧縮する
client Bに対しては生データを返す
ということが起きる
この時に、client Bに対して、gzipを返してもclient Bはこの形式を解釈できないかもしれない
この場合、Method + URLだけでは一意に値を決められないため、cacheが機能しない
上記の例の場合、Method + URL + Accept-Encodingで指定された値を見れば一意にできる
このkeyを指定するのがVary Header
Vary Headerにはrequest headerのfield名を指定する
何を指定すべきか?
Varyってそんな使うの?
同じURLに対して、異なるresourceを返す、というのはそんなに起こるものなのか?
圧縮の例はわかるmrsekut.icon
いいね、とか、投稿に紐づくコメント、とかもそうか
pc/mobileの出し分けとかは、URL変えちゃったほうがシンプルになると思う
/hoge/pcとかhoge?device=pcみたいに
同一URLにするなら、responseの型は完全に一致させないといけないわけで、色々制約が大きい気がするんだけどmrsekut.icon
Varyがあれば、
同じURLに対してコンテンツが変化しうる
ということを意味する
originによっては勝手にVaryをつけるサービスもある
例えば、S3
そのせいでcacheが変にならないか気に掛ける必要がある